אני מפתח אתר ובאתר יש סטטיסטיקות, הכוונה לכזה דבר:
http://i.imgur.com/zp6TJ3u.png .
ובקוד עצמו, לדוגמה החלק שמציג את מספר הרשומים נראה כך:
http://prntscr.com/4gd06n .
וזה עובד סבבה. השאלה היא האם כל פעם שארצה לעשות שאילתא אצטרך לעשות את הif הזה? אין דרך אחרת? כי הקוד סתם יצא ארוך, לדוגמה ככה: http://prntscr.com/4gd29f .
תודה מראש לעונים :)
8 תשובות
א. במקום לשלוף את כל השורות ואז להתעלם מהם ופשוט לקחת את num_rows אפשר לבקש מהמסד לא לקרוא את הנתונים, אלא רק לספור
ב. אפשר לחבר כמה שאילתות לאחת באמצעות הפקודה UNION
מה שיצא ייראה ככה:
UNION
select count(*) from users where blocked = 1
UNION
select count(*) from users where x = y
התוצאה של השליפה תהיה שלוש שורות כשבכל שורה שדה אחד שהוא מספר. תריץ אותה ותראה מה יוצא
תודה על המענה, בנוגע לא' זה בהחלט נשמע יותר הגיוני ויעיל, חידשת לי, אך בכל זאת אם האופציה הזאת של count קיימת, למה יש פונקציית num_rows?
בנוגע ל2, הרצתי וקיבלתי 3 שורות, בכל שורה מספר אחר (בהתאם לטבלה עליה עשיתי count), איך עובדים עם המידע הזה בphp? הרי זו שאילתא אחת שנמצאת במשתנה אחד, יש דרך לגשת אליה ולקבל כל פעם נתון אחר? אולי כמו במערך (שכל שורה היא אינדקס אחר)? עשיתי את זה בינתיים:
http://prntscr.com/4gfosd .
אך מה לרשום בתוך המשתנה statics? הרי השליפה היא של מספר השורות בטבלה, לא של ערכים מעמודות מסוימות.
עריכה:
חיפשתי קצת בגוגל ומצאתי שצריך לאחר הcount לעשות alias, ואת מה שכתבתי בalias לכתוב בתוך statics. אך זה מציג מספר השורות של כל העמודות ביחד, לא רק של users, הינה השאילתא:
עריכה שניה:
חיפשתי שוב בגוגל והגעתי כמו מקודם לstackoverflow, שם מצאתי את התשובה, והיא sub queires.
הקוד נראה עכשיו ככה:
http://prntscr.com/4ggcxd .
והוא עובד טוב, אך הוא יעיל? היית משנה בו משהו כדי לעשות אותו יותר טוב?
תודה מראש :)
אתה לא ממש צריך alias
אפשר לעבוד אם התוצאה בדיוק כפי שאתה עובד עם כל תוצאה אחרת בת כמה שורות שמוחזרת מהמסד
אפילו לא צריך לולאלות:
UNION
select count(*) from users where blocked = 1
UNION
select count(*) from users where x = y";
$result = $mysqli->query($query);
$stats = $result->fetchAll();
var_dump($stats);
אתה עשית אותו דבר, רק עם לולאה ומשהו מוזר בסגנון echo array. לא נראה לי שאפשר לעשות ככה echo לאלמנט במערך בלי אינדקס
כדי להציג את הנתונים צריך בסופו של דבר לעשות לולאה (foreach) אם הולכים לפי הדרך שנתת, אך בכל זאת בהדפסה מה שמודפס הוא כל השורות ולא רק השורה שאני מעוניין בה (לדוגמה echo stats 0 כאשר 0 הוא האינדקס של השורה הראשונה מחזיר את כל השורות).
יש לך רעיון?
לא הבנתי את השאלה.
התואצה של הפונקציה fetch_all היא מערך רב מימדי. אתה שואל איך לגשת אל נתונים בתוכו?
echo $stats[1][0] // select count(*) from users where blocked = 1
echo $stats[2][0] // select count(*) from users where x = y";
אוקיי הבנתי והצלחתי, ככה עכשיו זה נראה: http://prntscr.com/4imhz0 .
מה שהיה קודם נמצא בתוך ההערות.
אך מה יותר יעיל?